package com.yww.leetcode2.linkedlist;

import com.yww.leetcode.common.ListNode;

/**
 * @author yww
 * @description 206. 反转链表
 * @since 2024/11/11
 */
public class ReverseList206_03 {
    // 双指针写法
    public ListNode reverseList(ListNode head) {
        ListNode cur = head;
        ListNode pre = null;
        while (cur != null) {
            ListNode temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }

    public ListNode reverseList2(ListNode head) {
        return recur(head, null);
    }

    // 递归解法
    public ListNode recur(ListNode cur, ListNode pre) {
        if (cur == null) {
            return pre;
        }
        ListNode temp = cur.next;
        cur.next = pre;
        return recur(temp, cur);
    }
}
